/*
 * usuario.c
 *
 *  Created on: 05/09/2011
 *      Author: guido
 */

#include "usuario.h"
#include "lista.h"
#include <stdlib.h>
#include <string.h>

#include "iterador.h"

void Usuario_init(Usuario* usuarioNuevo, char* numero,
		char* apellido, char* nombre) {
	usuarioNuevo->amigos = (Lista*) malloc(sizeof(Lista));
	Lista_init(usuarioNuevo->amigos);
	strcpy(usuarioNuevo->numero, numero);
	strcpy(usuarioNuevo->apellido, apellido);
	strcpy(usuarioNuevo->nombre, nombre);
}

/* Devuelve 1 si amigo se encuentra en la lista de amigos de usuario */
int Usuario_esAmigo(Usuario* usuario, Usuario* amigo) {
	Iterador it = Lista_buscar(usuario->amigos, amigo->numero);
	if (It_tieneSiguiente(&it)) {
		return 1;
	}
	return 0;
}

/* Intenta agregar a amigo a la lista de amigos de usuario, si ya
 * son amigos, devuelve codigo de error */
int Usuario_agregarAmigo(Usuario* usuario, Usuario* amigo) {
	if (Usuario_esAmigo(usuario, amigo)) {
		return COD_YA_SON_AMIGOS;
	} else {
		Lista_agregar(usuario->amigos, amigo);
	}
	return COD_OK;
}

/* Intenta borrar a amigo a la lista de amigos de usuario, si no
 * son amigos, devuelve codigo de error */
int Usuario_borrarAmigo(Usuario* usuario, Usuario* amigo) {
	Iterador it = Lista_buscar(usuario->amigos, amigo->numero);
	if (!It_tieneSiguiente(&it)) {
		return COD_NO_SON_AMIGOS;
	} else {
		It_remover(&it);
	}
	return COD_OK;
}

/* Destruye la lista de amigos, y ademas borra en cada amigo
 * la referencia en sus listas de amigos a usuario */
void Usuario_destroy(Usuario* usuario) {
	Iterador it = Lista_iterador(usuario->amigos);
	while (It_tieneSiguiente(&it)) {
		Usuario* amigo = It_remover(&it);
		Usuario_borrarAmigo(amigo, usuario);
	}
	Lista_destroy(usuario->amigos);
	free(usuario->amigos);
}
